package com.tarena.lbs.basic.dao.repository.impl;

import com.tarena.lbs.basic.dao.mapper.AreaMapper;
import com.tarena.lbs.basic.pojo.po.AreaPO;
import com.tarena.lbs.basic.dao.repository.AreaRepository;
import java.util.List;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

@Repository
public class AreaRepositoryImpl implements AreaRepository {
    // 自动注入AreaMapper接口的实例，用于执行与AreaPO实体类相关的数据库操作
    @Autowired
    private AreaMapper areaMapper;

    /**
     * 查询所有省份信息
     *
     * 此方法构建了一个查询条件，用于筛选出所有深度为1且未被删除的区域信息，
     * 即省份信息从数据库中获取这些数据后，以列表形式返回
     *
     * @return 包含所有省份信息的列表
     */
    @Override
    public List<AreaPO> queryProvinces() {
        QueryWrapper<AreaPO> wrapper = new QueryWrapper<>();
        wrapper.eq("depth", 1).eq("is_delete", 0);
        return areaMapper.selectList(wrapper);
    }

    /**
     * 根据父级区域ID查询其下级区域信息
     *
     * 此方法接受一个父级区域的ID作为参数，构建查询条件，筛选出所有未被删除的下级区域信息
     * 这对于构建区域层级结构非常有用，比如查询某个省份下的所有城市
     *
     * @param parentId 父级区域的ID
     * @return 包含指定父级区域下所有未删除下级区域信息的列表
     */
    @Override
    public List<AreaPO> queryChildren(Long parentId) {
        QueryWrapper<AreaPO> wrapper = new QueryWrapper<>();
        wrapper.eq("parent_id", parentId).eq("is_delete", 0);
        return areaMapper.selectList(wrapper);
    }

    /**
     * 查询所有未删除的区域信息
     *
     * 此方法用于筛选出数据库中所有未被删除的区域信息，不论其层级和父级区域
     * 它提供了一种获取全部有效区域数据的手段，常用于初始化或全面查询场景
     *
     * @return 包含所有未删除区域信息的列表
     */
    @Override
    public List<AreaPO> queryAll() {
        QueryWrapper<AreaPO> wrapper = new QueryWrapper<>();
        wrapper.eq("is_delete", 0);
        return areaMapper.selectList(wrapper);
    }

}